#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>


/*了解命令行重定向的使用*/
int main(){
  fprintf(stdout, "fprintf stdout 1\n");
  fprintf(stdout, "fprintf stdout 2\n");

  fprintf(stderr, "fprintf stderr 1\n");
  fprintf(stderr, "fprintf stderr 2\n");

  return 0;
}



/*使用dup2完成重定向*/
//int main(){
//  ////>重定向
//  //int fd = open("h.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//  ////使用dup2
//  //dup2(fd, 1);
//  ////此时把fd复制给1，也就是把指针赋值给1号位置，此时1号位置指向h.txt
//  //printf("I am fd = 1 file\n");
//  
//  //>>重定向
//  //int fd = open("h.txt", O_CREAT | O_WRONLY | O_APPEND, 0666);
//  //dup2(fd, 1);
//  //printf("I am fd = 1 file\n");
//  
//  //<输入重定向
//  int fd = open("h.txt", O_RDONLY);
//  dup2(fd, 0);
//  char buffer[256] = {'\0'};
//  int a = 0;
//  while(fscanf(stdin, "%s %d\n", buffer, &a) != EOF){   
//    printf("%s : %d\n", buffer, a);
//  }
//  return 0;
//}



/*测试描述符分配规则 但是有一个遗留问题！！！！！*/
//int main(){   
//  close(1);
//  int fd = open("h.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//  printf("%d\n", fd);
//  close(fd);
//  return 0;
//}

/*直接使用系统调用 从0号文件读取，写入1，2号文件*/
//int main(){
//  char buffer[256] = {'\0'};
//  read(0, buffer, sizeof(buffer) - 1);
//  write(1, buffer, strlen(buffer));
//  write(2, buffer, strlen(buffer));
//  return 0;
//}


//int main(){
//  int fd1 = open("log1.txt", O_CREAT | O_WRONLY | O_TRUNC);
//  int fd2 = open("log2.txt", O_CREAT | O_WRONLY | O_TRUNC);
//  int fd3 = open("log3.txt", O_CREAT | O_WRONLY | O_TRUNC);
//  int fd4 = open("log4.txt", O_CREAT | O_WRONLY | O_TRUNC);
//
//  if(fd1 < 0) exit(1); 
//  if(fd2 < 0) exit(1); 
//  if(fd3 < 0) exit(1); 
//  if(fd4 < 0) exit(1); 
//
//  printf("fd1 : %d\n", fd1);
//  printf("fd2 : %d\n", fd2);
//  printf("fd3 : %d\n", fd3);
//  printf("fd4 : %d\n", fd4);
//
//  close(fd1);
//  close(fd2);
//  close(fd3);
//  close(fd4);
//  return 0;
//}

//int main(){
//  int fd = open("log.txt", O_RDONLY);
//  //只读方式打开
//  
//  char buffer[256] = {'\0'};
//  int rd = read(fd, buffer, 12);
//  while(rd != 0 && rd != -1){
//    printf("%s", buffer);
//    rd = read(fd, buffer, 12);
//  }
//  return 0;
//}


///*使用open、read、write、close*/
//int main(){
//  //int fd = open("log.txt", O_CREAT | O_WRONLY | O_TRUNC);
//  //O_WRONLY 只写的方式打开
//  //O_CREAT 判断文件是否存在，不存在就需要新建一个该文件
//  //O_TRUNC 清空文件
//  //这三个选项合并起来，其实就是语言层面使用的选项"w"
//  
//  int fd = open("log.txt", O_CREAT | O_WRONLY | O_APPEND);
//  //和只写的区别就是清空选项变成追加O_APPEND了
//  
//
//  /*write写入*/
//  int a = 0x4534ff40;
//  const char* msg = "\nHello World\n";
//  write(fd, &a, sizeof(a));
//  write(fd, msg, strlen(msg));//千万不要把字符串的'\0'写入
//
//  //关闭文件
//  close(fd);
//
//  return 0;
//}
